{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "d:\\sorf\\anaconda3\\lib\\site-packages\\h5py\\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 生成模拟数据，进行测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-13.986268  -10.734733   -8.073329  -15.448169   -4.551571    1.7185707\n",
      "  -7.4722376   4.7964897   2.9364853   6.293375    2.162447    1.4684086\n",
      "  -1.9640236   9.662052   13.29224     4.9750347  12.714321    5.6254883\n",
      "   8.343788   11.69239  ]\n"
     ]
    }
   ],
   "source": [
    "x = np.array(np.arange(100) ,dtype=np.float32)\n",
    "y = np.array(np.arange(100) ,dtype=np.float32)#此时X和Y其实是相等的，后面加入随机值，尽可能真实模拟实际情况\n",
    "y +=(np.random.random_sample(100) * 20)# *20指的是，上波动10\n",
    "y -=20 #下降20，，，y = x+b  -->  y = x - 10\n",
    "print(y[:20])#查看前20列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 设置权重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#创建变量  \n",
    "#tf.random_normal([1])返回一个符合正太分布的随机数  \n",
    "W=tf.Variable(tf.random_normal([1],name='weight'))  # 权重，由于线性拟合是 一维且线性，在此权值设置一个即可\n",
    "b=tf.Variable(tf.random_normal([1],name='bias'))    # 偏执参数是必须的，作为整体调整的参数\n",
    "\n",
    "# W = tf.Variable(0.0, name=\"weight\")\n",
    "# b = tf.Variable(0.0, name=\"bias\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加占位符"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = tf.placeholder(tf.float32,[None,1])    #指的是输入\n",
    "Y = tf.placeholder(tf.float32,[None,1])    #指的是输出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 构造损失函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss = tf.reduce_sum(tf.pow(tf.multiply(W,X) + b - Y,2.0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 添加优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = tf.train.AdamOptimizer(1).minimize(loss)\n",
    "# optimizer = tf.train.GradientDescentOptimizer(0.1).minimize(loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 开始训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "step: 0 loss:  923758.75 W: [-0.85981715] b: [2.8122025]\n",
      "step: 1 loss:  165715.42 W: [0.10227048] b: [3.7722352]\n",
      "step: 2 loss:  18670.035 W: [0.9657481] b: [4.6269903]\n",
      "step: 3 loss:  254037.94 W: [1.639363] b: [5.2783113]\n",
      "step: 4 loss:  546535.94 W: [2.048647] b: [5.6500006]\n",
      "step: 5 loss:  675056.6 W: [2.191824] b: [5.7469306]\n",
      "step: 6 loss:  608760.75 W: [2.1210024] b: [5.6278133]\n",
      "step: 7 loss:  423895.66 W: [1.8980321] b: [5.357139]\n",
      "step: 8 loss:  217593.08 W: [1.5773941] b: [4.98951]\n",
      "step: 9 loss:  66117.5 W: [1.206378] b: [4.5713124]\n",
      "step: 10 loss:  7953.576 W: [0.82849526] b: [4.144858]\n",
      "step: 11 loss:  39343.027 W: [0.48460564] b: [3.749936]\n",
      "step: 12 loss:  122130.38 W: [0.21017382] b: [3.4214554]\n",
      "step: 13 loss:  204499.31 W: [0.03002214] b: [3.1844199]\n",
      "step: 14 loss:  245923.22 W: [-0.04554225] b: [3.0498857]\n",
      "step: 15 loss:  232294.5 W: [-0.02037898] b: [3.0148442]\n",
      "step: 16 loss:  175393.95 W: [0.09106004] b: [3.0654]\n",
      "step: 17 loss:  101955.64 W: [0.26775444] b: [3.1806712]\n",
      "step: 18 loss:  40274.94 W: [0.48505604] b: [3.3358164]\n",
      "step: 19 loss:  9410.472 W: [0.71668994] b: [3.5042074]\n",
      "step: 20 loss:  13427.051 W: [0.9366373] b: [3.659499]\n",
      "step: 21 loss:  41853.73 W: [1.1214916] b: [3.7781408]\n",
      "step: 22 loss:  75946.625 W: [1.2531621] b: [3.8421497]\n",
      "step: 23 loss:  97858.06 W: [1.3211031] b: [3.841286]\n",
      "step: 24 loss:  98191.81 W: [1.3232164] b: [3.7738094]\n",
      "step: 25 loss:  78586.74 W: [1.2652553] b: [3.645734]\n",
      "step: 26 loss:  49066.0 W: [1.1592419] b: [3.4691668]\n",
      "step: 27 loss:  22358.771 W: [1.0215282] b: [3.260378]\n",
      "step: 28 loss:  8073.311 W: [0.8708053] b: [3.0378797]\n",
      "step: 29 loss:  9032.568 W: [0.72605646] b: [2.820472]\n",
      "step: 30 loss:  20985.113 W: [0.6044234] b: [2.6251857]\n",
      "step: 31 loss:  35494.41 W: [0.51916325] b: [2.4652784]\n",
      "step: 32 loss:  44396.59 W: [0.47808748] b: [2.3486562]\n",
      "step: 33 loss:  43534.996 W: [0.48285332] b: [2.27711]\n",
      "step: 34 loss:  34062.395 W: [0.5292086] b: [2.2465005]\n",
      "step: 35 loss:  21053.475 W: [0.6080052] b: [2.2477355]\n",
      "step: 36 loss:  10504.36 W: [0.7066934] b: [2.2682688]\n",
      "step: 37 loss:  6352.3374 W: [0.81107366] b: [2.2938833]\n",
      "step: 38 loss:  8891.7 W: [0.9071579] b: [2.3105915]\n",
      "step: 39 loss:  15159.386 W: [0.98297805] b: [2.3064687]\n",
      "step: 40 loss:  20872.498 W: [1.0301056] b: [2.2731714]\n",
      "step: 41 loss:  22762.754 W: [1.0446222] b: [2.2068803]\n",
      "step: 42 loss:  20065.484 W: [1.027377] b: [2.1085238]\n",
      "step: 43 loss:  14514.599 W: [0.9835373] b: [1.9833043]\n",
      "step: 44 loss:  9062.429 W: [0.9215733] b: [1.8396797]\n",
      "step: 45 loss:  6166.107 W: [0.8518729] b: [1.6879954]\n",
      "step: 46 loss:  6581.523 W: [0.7851789] b: [1.5389477]\n",
      "step: 47 loss:  9221.936 W: [0.7310427] b: [1.4020612]\n",
      "step: 48 loss:  12015.675 W: [0.6965068] b: [1.2843815]\n",
      "step: 49 loss:  13170.7295 W: [0.68521756] b: [1.1895833]\n",
      "step: 50 loss:  12102.311 W: [0.69710267] b: [1.117635]\n",
      "step: 51 loss:  9561.081 W: [0.728636] b: [1.0650506]\n",
      "step: 52 loss:  7006.4355 W: [0.7736052] b: [1.0256515]\n",
      "step: 53 loss:  5681.817 W: [0.8242283] b: [0.99168646]\n",
      "step: 54 loss:  5949.8486 W: [0.87243843] b: [0.9551231]\n",
      "step: 55 loss:  7224.0225 W: [0.91114396] b: [0.90891165]\n",
      "step: 56 loss:  8451.979 W: [0.93527234] b: [0.84802634]\n",
      "step: 57 loss:  8794.71 W: [0.9424375] b: [0.77012473]\n",
      "step: 58 loss:  8078.999 W: [0.93313587] b: [0.675734]\n",
      "step: 59 loss:  6791.143 W: [0.91046435] b: [0.56796366]\n",
      "step: 60 loss:  5683.2993 W: [0.8794386] b: [0.45182553]\n",
      "step: 61 loss:  5282.944 W: [0.84604573] b: [0.33329403]\n",
      "step: 62 loss:  5612.301 W: [0.81619865] b: [0.2182699]\n",
      "step: 63 loss:  6255.5034 W: [0.79476434] b: [0.11161608]\n",
      "step: 64 loss:  6681.756 W: [0.78482455] b: [0.01642133]\n",
      "step: 65 loss:  6588.8574 W: [0.7872833] b: [-0.06639358]\n",
      "step: 66 loss:  6052.1455 W: [0.80087036] b: [-0.13807583]\n",
      "step: 67 loss:  5415.5527 W: [0.8225154] b: [-0.20166895]\n",
      "step: 68 loss:  5031.906 W: [0.8480057] b: [-0.2613567]\n",
      "step: 69 loss:  5038.5356 W: [0.8727969] b: [-0.32165283]\n",
      "step: 70 loss:  5304.99 W: [0.8928286] b: [-0.38658625]\n",
      "step: 71 loss:  5560.0757 W: [0.9052028] b: [-0.4590256]\n",
      "step: 72 loss:  5589.3755 W: [0.9086118] b: [-0.5402545]\n",
      "step: 73 loss:  5364.6245 W: [0.90345365] b: [-0.6298587]\n",
      "step: 74 loss:  5031.123 W: [0.89163387] b: [-0.72592574]\n",
      "step: 75 loss:  4783.3066 W: [0.87610817] b: [-0.82549995]\n",
      "step: 76 loss:  4727.8643 W: [0.8602666] b: [-0.9251945]\n",
      "step: 77 loss:  4827.146 W: [0.8472803] b: [-1.0218403]\n",
      "step: 78 loss:  4948.2104 W: [0.8395334] b: [-1.1130517]\n",
      "step: 79 loss:  4968.1245 W: [0.83823955] b: [-1.1976072]\n",
      "step: 80 loss:  4855.4727 W: [0.84330434] b: [-1.2755886]\n",
      "step: 81 loss:  4676.3384 W: [0.8534427] b: [-1.3482639]\n",
      "step: 82 loss:  4532.4927 W: [0.8665138] b: [-1.4177537]\n",
      "step: 83 loss:  4485.0684 W: [0.8799938] b: [-1.4865602]\n",
      "step: 84 loss:  4518.8564 W: [0.8914891] b: [-1.5570557]\n",
      "step: 85 loss:  4565.681 W: [0.89918756] b: [-1.6310327]\n",
      "step: 86 loss:  4561.129 W: [0.90216506] b: [-1.7093995]\n",
      "step: 87 loss:  4489.3276 W: [0.90049654] b: [-1.7920703]\n",
      "step: 88 loss:  4385.938 W: [0.8951633] b: [-1.8780581]\n",
      "step: 89 loss:  4303.9 W: [0.88778806] b: [-1.9657382]\n",
      "step: 90 loss:  4272.428 W: [0.88026226] b: [-2.0532188]\n",
      "step: 91 loss:  4279.9014 W: [0.8743471] b: [-2.1387386]\n",
      "step: 92 loss:  4289.1885 W: [0.8713299] b: [-2.2210073]\n",
      "step: 93 loss:  4269.0464 W: [0.8718015] b: [-2.2994285]\n",
      "step: 94 loss:  4215.9883 W: [0.87559146] b: [-2.3741636]\n",
      "step: 95 loss:  4152.0894 W: [0.88186353] b: [-2.446037]\n",
      "step: 96 loss:  4104.2173 W: [0.88934076] b: [-2.5163126]\n",
      "step: 97 loss:  4083.172 W: [0.8966043] b: [-2.5863945]\n",
      "step: 98 loss:  4078.3223 W: [0.90239966] b: [-2.6575243]\n",
      "step: 99 loss:  4069.252 W: [0.90588516] b: [-2.730532]\n",
      "step: 100 loss:  4042.858 W: [0.90677553] b: [-2.8056943]\n",
      "step: 101 loss:  4002.0237 W: [0.90535706] b: [-2.8827195]\n",
      "step: 102 loss:  3960.6533 W: [0.9023804] b: [-2.960854]\n",
      "step: 103 loss:  3931.084 W: [0.89886296] b: [-3.0390794]\n",
      "step: 104 loss:  3914.8296 W: [0.89584905] b: [-3.1163507]\n",
      "step: 105 loss:  3903.2583 W: [0.8941829] b: [-3.1918218]\n",
      "step: 106 loss:  3886.0496 W: [0.8943422] b: [-3.2650123]\n",
      "step: 107 loss:  3859.5342 W: [0.896364] b: [-3.3358798]\n",
      "step: 108 loss:  3828.4224 W: [0.899873] b: [-3.404793]\n",
      "step: 109 loss:  3800.6155 W: [0.9041978] b: [-3.4724152]\n",
      "step: 110 loss:  3780.3877 W: [0.90854335] b: [-3.539533]\n",
      "step: 111 loss:  3765.5947 W: [0.91217756] b: [-3.6068702]\n",
      "step: 112 loss:  3750.4993 W: [0.91458917] b: [-3.6749313]\n",
      "step: 113 loss:  3730.9895 W: [0.915584] b: [-3.7439053]\n",
      "step: 114 loss:  3707.6067 W: [0.91530234] b: [-3.8136487]\n",
      "step: 115 loss:  3684.2852 W: [0.9141592] b: [-3.883745]\n",
      "step: 116 loss:  3664.5586 W: [0.9127275] b: [-3.9536202]\n",
      "step: 117 loss:  3648.7288 W: [0.9115941] b: [-4.0226874]\n",
      "step: 118 loss:  3634.1765 W: [0.9112243] b: [-4.090481]\n",
      "step: 119 loss:  3618.0264 W: [0.91186464] b: [-4.1567516]\n",
      "step: 120 loss:  3599.557 W: [0.91350454] b: [-4.221508]\n",
      "step: 121 loss:  3580.4224 W: [0.9159001] b: [-4.28499]\n",
      "step: 122 loss:  3562.8486 W: [0.9186507] b: [-4.3475933]\n",
      "step: 123 loss:  3547.6636 W: [0.9213059] b: [-4.409765]\n",
      "step: 124 loss:  3533.8389 W: [0.92347574] b: [-4.47189]\n",
      "step: 125 loss:  3519.6797 W: [0.9249176] b: [-4.5342083]\n",
      "step: 126 loss:  3504.3706 W: [0.9255813] b: [-4.5967674]\n",
      "step: 127 loss:  3488.5112 W: [0.9256048] b: [-4.659429]\n",
      "step: 128 loss:  3473.348 W: [0.9252655] b: [-4.7219152]\n",
      "step: 129 loss:  3459.5884 W: [0.9249012] b: [-4.783889]\n",
      "step: 130 loss:  3446.8816 W: [0.924824] b: [-4.8450384]\n",
      "step: 131 loss:  3434.3013 W: [0.92524666] b: [-4.905151]\n",
      "step: 132 loss:  3421.2466 W: [0.9262393] b: [-4.9641557]\n",
      "step: 133 loss:  3407.9033 W: [0.92772454] b: [-5.0221295]\n",
      "step: 134 loss:  3394.9353 W: [0.929509] b: [-5.0792637]\n",
      "step: 135 loss:  3382.8184 W: [0.9313407] b: [-5.135809]\n",
      "step: 136 loss:  3371.4446 W: [0.93297666] b: [-5.192006]\n",
      "step: 137 loss:  3360.3184 W: [0.93424207] b: [-5.248029]\n",
      "step: 138 loss:  3349.061 W: [0.9350682] b: [-5.303947]\n",
      "step: 139 loss:  3337.72 W: [0.9355004] b: [-5.3597136]\n",
      "step: 140 loss:  3326.6484 W: [0.9356768] b: [-5.415192]\n",
      "step: 141 loss:  3316.129 W: [0.9357858] b: [-5.470196]\n",
      "step: 142 loss:  3306.1284 W: [0.9360137] b: [-5.524539]\n",
      "step: 143 loss:  3296.38 W: [0.93649805] b: [-5.578086]\n",
      "step: 144 loss:  3286.66 W: [0.9372964] b: [-5.6307797]\n",
      "step: 145 loss:  3276.9802 W: [0.9383787] b: [-5.682651]\n",
      "step: 146 loss:  3267.5327 W: [0.9396426] b: [-5.733803]\n",
      "step: 147 loss:  3258.4739 W: [0.94094604] b: [-5.7843776]\n",
      "step: 148 loss:  3249.788 W: [0.94214743] b: [-5.8345165]\n",
      "step: 149 loss:  3241.3237 W: [0.9431424] b: [-5.8843255]\n",
      "step: 150 loss:  3232.9563 W: [0.9438877] b: [-5.9338484]\n",
      "step: 151 loss:  3224.6965 W: [0.9444073] b: [-5.9830627]\n",
      "step: 152 loss:  3216.646 W: [0.9447801] b: [-6.0318913]\n",
      "step: 153 loss:  3208.89 W: [0.94511455] b: [-6.080228]\n",
      "step: 154 loss:  3201.4104 W: [0.9455173] b: [-6.127968]\n",
      "step: 155 loss:  3194.121 W: [0.9460651] b: [-6.175037]\n",
      "step: 156 loss:  3186.9548 W: [0.9467872] b: [-6.221408]\n",
      "step: 157 loss:  3179.9219 W: [0.9476612] b: [-6.2671046]\n",
      "step: 158 loss:  3173.08 W: [0.9486243] b: [-6.312192]\n",
      "step: 159 loss:  3166.4707 W: [0.94959307] b: [-6.356755]\n",
      "step: 160 loss:  3160.0745 W: [0.9504881] b: [-6.400874]\n",
      "step: 161 loss:  3153.8418 W: [0.9512551] b: [-6.4446063]\n",
      "step: 162 loss:  3147.7375 W: [0.9518774] b: [-6.48797]\n",
      "step: 163 loss:  3141.7715 W: [0.9523773] b: [-6.5309453]\n",
      "step: 164 loss:  3135.9775 W: [0.9528064] b: [-6.5734835]\n",
      "step: 165 loss:  3130.3704 W: [0.95322907] b: [-6.6155233]\n",
      "step: 166 loss:  3124.9346 W: [0.95370334] b: [-6.657009]\n",
      "step: 167 loss:  3119.639 W: [0.9542658] b: [-6.6979074]\n",
      "step: 168 loss:  3114.4673 W: [0.9549231] b: [-6.738214]\n",
      "step: 169 loss:  3109.4294 W: [0.95565283] b: [-6.777954]\n",
      "step: 170 loss:  3104.5413 W: [0.95641243] b: [-6.8171725]\n",
      "step: 171 loss:  3099.8074 W: [0.9571528] b: [-6.8559213]\n",
      "step: 172 loss:  3095.2126 W: [0.95783263] b: [-6.894244]\n",
      "step: 173 loss:  3090.7402 W: [0.9584295] b: [-6.932167]\n",
      "step: 174 loss:  3086.3838 W: [0.9589443] b: [-6.9696913]\n",
      "step: 175 loss:  3082.1484 W: [0.9593992] b: [-7.006798]\n",
      "step: 176 loss:  3078.0427 W: [0.9598294] b: [-7.043455]\n",
      "step: 177 loss:  3074.0637 W: [0.9602717] b: [-7.0796294]\n",
      "step: 178 loss:  3070.2017 W: [0.9607542] b: [-7.1152964]\n",
      "step: 179 loss:  3066.445 W: [0.9612889] b: [-7.150447]\n",
      "step: 180 loss:  3062.7937 W: [0.9618697] b: [-7.18509]\n",
      "step: 181 loss:  3059.2507 W: [0.96247566] b: [-7.2192507]\n",
      "step: 182 loss:  3055.8174 W: [0.96307856] b: [-7.2529593]\n",
      "step: 183 loss:  3052.4893 W: [0.9636517] b: [-7.2862463]\n",
      "step: 184 loss:  3049.2595 W: [0.9641776] b: [-7.3191323]\n",
      "step: 185 loss:  3046.1226 W: [0.9646521] b: [-7.351625]\n",
      "step: 186 loss:  3043.0784 W: [0.96508473] b: [-7.3837185]\n",
      "step: 187 loss:  3040.1274 W: [0.9654944] b: [-7.415397]\n",
      "step: 188 loss:  3037.2693 W: [0.9659031] b: [-7.4466424]\n",
      "step: 189 loss:  3034.499 W: [0.9663293] b: [-7.47744]\n",
      "step: 190 loss:  3031.8125 W: [0.9667825] b: [-7.507783]\n",
      "step: 191 loss:  3029.2065 W: [0.96726155] b: [-7.537677]\n",
      "step: 192 loss:  3026.6814 W: [0.9677558] b: [-7.567136]\n",
      "step: 193 loss:  3024.2349 W: [0.9682491] b: [-7.596179]\n",
      "step: 194 loss:  3021.8667 W: [0.96872526] b: [-7.624827]\n",
      "step: 195 loss:  3019.5728 W: [0.9691729] b: [-7.653094]\n",
      "step: 196 loss:  3017.349 W: [0.96958846] b: [-7.680987]\n",
      "step: 197 loss:  3015.1953 W: [0.96997654] b: [-7.7085056]\n",
      "step: 198 loss:  3013.1106 W: [0.9703479] b: [-7.735643]\n",
      "step: 199 loss:  3011.093 W: [0.97071546] b: [-7.762389]\n"
     ]
    }
   ],
   "source": [
    "init = tf.global_variables_initializer()\n",
    "save_step_loss = {\"step\":[],\"loss\":[]}# 保存step和loss用于可视化操作\n",
    "line_k = 0\n",
    "line_b = 0\n",
    "with tf.Session() as sess:\n",
    "    sess.run(init)\n",
    "    for step in range(200):   #一千次迭代\n",
    "        sess.run(optimizer,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)})\n",
    "        print(\"step:\",step,\n",
    "              \"loss: \",sess.run(loss,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)}),\n",
    "              \"W:\",sess.run(W),\n",
    "              \"b:\",sess.run(b))\n",
    "        save_step_loss[\"step\"].append(step)\n",
    "        save_step_loss[\"loss\"].append(sess.run(loss,feed_dict={X:x.reshape(-1,1),Y:y.reshape(-1,1)}))\n",
    "    line_k = sess.run(W)\n",
    "    line_b = sess.run(b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1db43f6fe48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(save_step_loss[\"step\"],save_step_loss[\"loss\"])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1db44031748>]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1db440316a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y,5,c=\"r\")\n",
    "plt.plot([0,100],[0 * line_k + line_b , 100 * line_k + line_b])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
